<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>箭头函数与ES6声明</title>
	</head>
	<body>
		<!-- 说到箭头函数  es6  新增 let const变量声明 -->
		<!-- 
		 let与var的区别
		 1、全局变量不会自动绑定到window
		 2、变量提升，不允许在定义前使用
		 3、不允许重复声明
		 4、会触发块级作用域，即花括号作用域
		 5、暂时性死区
		 
		 const有let所有的特性
		 1、const不允许修改地址
		 2、简单类型，值是地址，地址就是值
		 3、复杂类型，值是值，地址是地址，地址不能改，但是值能改
		 
		 使用原则：先const=>let=>var
		 如果说不需要改变他的值，那就用const，如果要改变他的值就用let，如果要变量提升或者其他就用var
		 -->
		 
		 <!-- 箭头函数-->
		
		<script type="text/javascript">
			// var a=1;
			// console.log(a);
			// console.log(window.a);
			
			// let b=1;
			// console.log(b);
			// console.log(window.b);//undefined
			//全局变量不会自动绑定到window
			
			// console.log(a); //undefined
			// var a=1;
			// console.log(a); //1
			
			// console.log(b); //Cannot access 'b' before initializationat
			// let b=1;
			// console.log(b); 
			// 变量提升，不允许在定义前使用
			
			// var a=1;
			// console.log(a);
			// var a=2;
			// console.log(a);
			
			// let b=1;
			// console.log(b);
			// let b=2; //Identifier 'b' has already been declared
			// console.log(b);
			//不允许重复声明
			
			// if(true){
			// 	var a=1;
			// }
			// console.log(a); //1A
			
			// if(true){
			// 	let a=1;
			// }
			// console.log(a); //a is not defined
			
			// {
			// 	let a=1;
			// }
			// console.log(a); //a is not defined
			//会触发块级作用域，即花括号作用域
			
			// function fn(){
			// 	//var a=1;
			// 	let a=2; //暂时性死区，在作用域里不能重复定义
			// 	console.log(a)
			// }
			// fn();
			// let a=3;
			// console.log(a)
			// 暂时性死区
			
			// const a=2;
			// a=3;
			// console.log(a);
			//基本类型，值是地址，地址就是值，不能修改
			
			// const b={name:'ljh',cj:55};
			// console.log(b)
			// b.name='wjh'
			// console.log(b)
			//复杂类型，值是指，地址是地址，所以值可以改变，但是const的地址不能修改
			
			//原形
			// const result = function(){
			// 	console.log('hello word')
			// }
			// result();
			
			// const result = () => console.log('hello')
			// result()
			
			//简写
			let name = 'ljh';
			//单个参数 可以省略参数括号 
			const result = v => console.log(v);
			result(name);
			//多个参数 一条简单语句 
			const result1 = (k,v) => console.log(k,v);
			result1('key','value');
			//多个参数 多条语句
			const result2 = (k,v) => {
				k=k*2;
				console.log(k,v)
				return k;
			}
			console.log(result2(1,4));
			
		</script>
	</body>
</html>
